home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / System / LocaleCS / documents / ARexxManuál / Programy.rexx < prev    next >
OS/2 REXX Batch file  |  2000-02-12  |  36KB  |  926 lines

  1. /* Arexxový program ªVycucº
  2. ** Souhrn vîech ukázkových programû k Arexx Manuálu.
  3. ** Sestavil: Tomáî Procházka ©1998-2000
  4. ** Vznik: Srpen 1998
  5. ** $VER: AM-Vycuc 0.9 (12.2.20000) Tomáî Procházka
  6. ** */  verze = '0.9' ; datum = '12.2.2000'
  7.  
  8. /*  Struçný popis:
  9. ** Jistë víte,ùe tento program slouùí ke spouîtëní Arexxových programû pêímo
  10. ** z Arexx  manuálu, ale  také  k "vycucnutí"  tëchto  programû  do  souboru.
  11. ** Samozêejmë, ùe  vám mûùe  poslouùit  jako  pêíklad  pêi  psaní  podobných
  12. ** programû. Vzhledem  k tomu, ùe tento program  je celkem sloùitý, bych vám
  13. ** nejdêíve  doporuçil  poêádnë  prostudovat  manuál. Program  je sice místy
  14. ** doplnën o  komentáê, ale ten  zaçáteçníkûm  stejnë moc nepomûùe.... Navíc
  15. ** jsem se pêíliî  nenamáhal o to, aby byl pêehledný, více çasu jsem vënoval
  16. ** samotnému manuálu... Pêesto doufám, ùe jsem mu vînoval alespoñ tolik çasu,
  17. ** aby vám dobêe slouùil ?
  18. */
  19.  
  20. /* Nastavení - Preference */
  21. /* Implicitní výstupní adresáê pro vycucnuté programy. */
  22.  Path = 'Ram:'
  23. /* Implicitní výstup */
  24.  Z_STDOUT = 'con:0/12/660/229/Výstup ukázky/CLOSE/AUTO'
  25. /* Pokud se nastaví na ª1º nebude knihovna ªRexxReqTools.libraryº pouùita,
  26.    i pêesto, ùe ji vlastníte. */
  27.  Nepouzivat = 0
  28.  
  29. /* Nastavení - dûleùitá data - Nemënit ! */
  30. P_ZUP = 15        /* Poçet základních ukázkových programû. */ 
  31. P_DUP = 5         /* Poçet doplnëných ukázkových programû. */
  32.  
  33. Optins Results
  34. If ~Show('L','rexxsupport.library') Then AddLib('rexxsupport.library',0,-30,0)
  35.  
  36. SIGNAL ON SYNTAX
  37. SIGNAL ON BREAK_C
  38.  
  39. TRACE 6
  40. Arg Program "'"Parametry"'" ostatni
  41. Program = Strip(Program,B)
  42.  
  43. /* Následující oddíl zjiîtuje zda existuje soubor ªARM_OUTº, nastaví promënnou
  44. ** ºvystupº podle výsledku a podle toho nastaví výstup a vstup programu. Kdyby
  45. ** se tak nestalo veîkerý výstup i vstup by byl díky MultiViewu potlaçen. 
  46. */
  47.  
  48. Call Close(STDOUT) ; Call Close(STDIN)
  49. If Open(OUT,'ENV:ARM_OUT') Then Vystup = ReadLn(OUT)
  50.                            Else Vystup = Z_STDOUT
  51.  
  52. Call Open(STDOUT,vystup,W)
  53. Call Pragma '*', STDOUT
  54. call Open(STDIN,'*',R)
  55.  
  56. /* Následující çást zjiîïuje zda vlastníte knihovnu RexxReqTools.library */
  57.  
  58. If Exists('Libs:rexxreqtools.library') & nepouzivat=0 Then Do
  59.   If ~Show('L','rexxreqtools.library') Then AddLib('rexxreqtools.library',0,-30,0)
  60.   Existuje = 1
  61. End 
  62. Else Existuje=0
  63.  
  64. NL='A'x  /* Odêádkování */
  65. pocatekP = pozice() /* Zjiîttëní êádku na kterém zaçínájí ukázkové programy */
  66.  
  67. /* Následující çást volá procedûru Demo() - pokud uùivatel tento program zpustí samostatnë. */
  68. IF Program='' Then Call Demo()
  69.  
  70. /* Následující çást zjiîtuje zda chcete kopírovat program do souboru. */
  71. If Program='CUC' Then Call Vycuc(parametry)
  72.  
  73. /* Dalîí çást programu se stará o spouîtëní ªUkázkových programûº */
  74.  
  75. /* Následující podmínka zjiîtuje, zda je programu nutno pêedat nëjaké parametry,
  76. ** pokud ano, poùádá  o pêedání parametrû uùivatele . A to dvëma zpûsoby.  Pokud
  77. ** uùivatel vlastní  knihovnu RexxReqTools - otevêe s i krásné okénko, pokud ne,
  78. ** poùádá o zadání v oknë, kde bude smëêovat veîkerý výstup. */
  79.  
  80. If Parametry~='' Then Do
  81.   IF Existuje = 1 Then DO
  82.      Parametry = RTGetString(Parametry,'Program vyùaduje parametry:','Zadání argumentû')
  83.   End     
  84.   Else Do
  85.      say ' Program si ùádá parametry !!!'
  86.      say ' Ale Nebyla nalezena knihovna RexxReqTools.library'
  87.      say ' Zeptam se vás tedy prostêednictvím okna.'
  88.      say ' Pokud stisknete jen ENTER bude pêedáno ª'Parametry'º'
  89.      say ' Pokud napíîete mezeru a ENTER nebude pêedáno nic'
  90.      Options prompt ' Zadej Parametry: ' ; Parse Pull P
  91.      If P~='' Then Parametry=P
  92.      If Length(P)>0 & Compress(P)='' Then Parametry = ''
  93.   End
  94.  
  95. End
  96.  
  97. /* Vlastní spuîtení nëkterého z ukázkových programû. */
  98. Say ' Program bëùí...'
  99. Say ''
  100. Call Time(R)
  101. Interpret 'Call' Program'('parametry')'
  102. cas = time(E)
  103. Say ''
  104. PARSE VAR cas cas'.'
  105. po=' po'
  106. IF cas=1 Then k=' sekundë' ; Else k=' sekundách'
  107. IF cas=0 Then Do; cas='' ; po='' ; k='témëê okamùitë' ; End ; Else k=' sekundách'
  108. Say ' Program'po cas||k 'skonçil.' ; Call Delay 50
  109. Say ''
  110. SAY ' Líbil se vám tento program ? Nechte si ho Vycucnout.'
  111. Options Prompt ' Chcete ho tedy uloùit do souboru ? (Ano/Ne = ENTER): ' ; Pull OK
  112. IF Odpoved(OK,)=1  Then Call Vycuc(Program)
  113. Call END()
  114. Exit 0
  115.  
  116. /* -------------------- Pomocné procedûry -------------------- */
  117.  
  118. VYCUC:   /* Tato procedûra vytahuje program a ukádá je do souboru. */
  119.  Parse Arg Cislo
  120.  C_Cas=TIME(S)
  121.  
  122.    /* Demo */
  123.  IF Existuje=0 Then Do
  124.   say ''
  125.   SAY 'Reùim ªVycucºD'  
  126.   DO FOR 16 ; Call Delay(1) ; Writech(STDOUT,'@') ; END ; Writech(STDOUT,'C')
  127.      DO FOR 4
  128.        Call Delay 10 
  129.        Writech(STDOUT,'VycucºD') ; Call Delay(4)
  130.        Writech(STDOUT,'VycucºD') 
  131.      END
  132.   Say '' ; Call Delay 20 ; Say ''
  133.   Call Delay 25
  134.  End
  135.  IF cislo='' Then DO until okEnd=1
  136.    /* Výbër programu */
  137.    IF Existuje = 1 THEN DO 
  138.                      cislo=rtgetstring(,'>>> Vycucnutí programu <<<'NL'Máte k dispozici 'P_ZUP' základních a 'P_DUP' doplnëné.'NL'Zadejte ç. programu (Pêed doplñené dejte ªDº)','Výzva','_OK|_Ukonçi program','rtgs_flags=gsreqf_centertext',OK)
  139.                    End
  140.                    ELSE DO
  141.                      SAY ' Máte k dispozici 'P_ZUP' základních a 'P_DUP' doplñkové programy ! '
  142.                      Options prompt ' Zadejte çíslo programu (pêed doplnëné pêidejte D): ' ; Pull Cislo
  143.                    END
  144.    IF cislo='' Then
  145.      IF Existuje=1 Then  IF rtezrequest('Ùádný program nechcete? Îkoda, ale jiù nic nemohu dëlat.') = 0 Then Exit 0 ; Else NOP
  146.                    Else  Do; Say 'Ùádný program nechcete? Îkoda, ale jiù nic nemohu dëlat...' ; Call Konec() ; End
  147.    /* Kontrola */
  148.    Cislo=Compress(Upper(Cislo))
  149.    okEnd=1 /* Pokud tato promënná zûstane zachována skonçí cyklus dotazu*/
  150.    IF Verify(cislo,'0123456789D')>0 & Verify(cislo,'123456789',M)=0 Then DO
  151.      IF Existuje = 1 Then OK = rtezrequest('Chybné,zadání!'NL'Opakovat?','_ANO|_NE','Upozornëní!','rtgs_flags=gsreqf_centertext rtgs_flags=gsreqf_highlighttext')
  152.                      ELSE DO
  153.                        Options prompt ' Chybné zadání. Chcete pokraçovat? (Ano/Ne): ' ; Pull OK
  154.                        OK = Odpoved(OK)
  155.                      End
  156.      IF OK=0 Then Call END() ; Else okEnd=0
  157.    End
  158.    cislo='P'Upper(cislo)':' /* Doplnëní názvu programu */
  159.  END
  160.   pocet=0 ; Pznak=0 ; Zap=0 ; Call Time(R)
  161.   DO radek = pocatekP TO SOURCELINE()
  162.     obsah = SOURCELINE(radek)
  163.     IF Zap=1 Then Do 
  164.       IF POS('/* -',obsah)>0 Then Leave
  165.       pozice = POS('RETURN',UPPER(obsah))
  166.       IF pozice>0 Then DO
  167.         PARSE VALUE UPPER(obsah) WITH 'RETURN' RV . 
  168.         Select
  169.           When LEFT(RV,1)='E' Then nahrada = 'EXIT' DelStr(RV,1,1)
  170.           When LEFT(RV,1)='N' Then nahrada = ''
  171.          Otherwise Do;nahrada=Obsah;Obsah=0;End
  172.         End
  173.         /* Zámëna EXIT za ENTER */
  174.         pozice=pozice+1 ; Parse VALUE ' 'Obsah WITH  pred =pozice . . za
  175.         obsah = Delstr(pred,1,1)||nahrada||za
  176.       END
  177.       Obsah = Delstr(Obsah,1,3)
  178.       /* Uloùení do souboru */
  179.       IF Length(nahrada)=0 Then Leave
  180.       Pznak = Pznak + WriteLN(OUT,obsah) ; pocet=pocet+1
  181.     End
  182.     IF POS(cislo,obsah)>0 Then DO;Cas_A=Time(R);Call VyberS();Zap=1;Call Time(R);END
  183.   END
  184.   Call CLose(OUT)
  185.   Cas_B = Time(E) ; C_Cas= Time(S) - C_cas
  186.   IF ZAP=0 Then DO
  187.     IF Existuje=0 Then DO
  188.       Say ' Bylo zadáno neexistující çíslo programu !'
  189.       Say ' Zopakujte vstup !'
  190.     End
  191.     Call Znovu_V
  192.   END    
  193.   /* Závërné statistiky */
  194.   IF Existuje=1 Then DO;NL='0A'x ;TP='';SP='';ZP='';END 
  195.                 Else DO;NL='E';TP='';SP='';ZP='';END
  196.   Text = ' 'SP'Hotovo,'ZP' program je vycucnut a uloùen do souboru.'NL' 'TP'Informace o ' C_cas's çinnosti programu:'ZP''NL'  Ças vyhledávání:' Cas_A's   Ças ukládání:' Cas_B's'NL' 'TP'Informace o uloùeném souboru:'ZP''NL'  Poçet êádkû:' pocet'+2      Poçet znakû:' Pznak||NL
  197.   IF Existuje=1 Then Call RTezrequest(Text||NL' Poloha souboru: ª'soubor'º','OK','Výsledky')
  198.   ELSE DO
  199.     Say ''
  200.     Say Text
  201.     Call END()
  202.   END
  203. Exit 0
  204.  
  205. VyberS: 
  206.   Parse Value Compress(obsah) With  . '/*'nazev'*/' ; nazev=nazev'.rexx'
  207.   IF Existuje=1 Then DO
  208.      soubor = rtfilerequest(path,nazev,'Vyber soubor!','Pokraçuj')
  209.      IF soubor='' Then Exit 0
  210.      IF Exists(soubor) Then DO
  211.        Pozice=LastPos('/',Translate(soubor,'/',':'))+1 ; Parse var soubor cesta =pozice nazev
  212.        vysledek = rtgetstring(nazev,'Soubor s tímto názvem jiù existuje!'NL'Mûùete zadaním nového jména soubor zachovat.'NL||NL'Pûvodní název: ª'nazev'º','Výzva','Pokraçuj','rtgs_flags=gsreqf_centertext')
  213.        IF vysledek~='' Then DO;Parse Var vysledek pred'.'.;Soubor=cesta||pred'.rexx';End
  214.      END     
  215.   END
  216.    Else DO
  217.      SAY ''
  218.      SAY ' Stisknete-li jen ENTER bude zadáno: ª'path||nazev'º'
  219.      SAY ' Pokud  nezadáte za  název alespoñ  teçku, bude  vstup brán'
  220.      SAY ' jako cesta do adresáêe (zaêízení), kde se má uloùit soubor'
  221.      SAY ' s pûvodním jménem ª'nazev'º.'
  222.  
  223.      DO P=0 Until Spravne=1 ; Spravne=1 /* Promënná "Spravne" nesmí být zmënëna, protoùe jinak je smyçka opakována */
  224.        Options prompt ' Zadejte cestu (a název) pro uloùení programu: '
  225.        Parse PULL soubor
  226.        /* Pokud uùivatel nic nezadá bude program uloùen do implicitního souboru. */
  227.        IF soubor='' Then DO;Soubor = Path||nazev;OKC=1;END
  228.        
  229.        /* Rozklad na cestu a název. */
  230.        IF Pos('.',soubor)>0 Then DO;Pozice=LastPos('/',Translate(soubor,'/',':'))+1 ; Parse var soubor cesta =pozice nazevB;End
  231.                             Else Do;cesta=soubor;nazevb=nazev;End
  232. /*       IF ~Exists(cesta) Then DO; Say ' Zadaný adresáê neexistuje !!!'; iterate; End */
  233.        IF nazevB='' Then DO;nazevb=nazev;soubor=cesta;End
  234.        soubor = cesta||bnazev
  235.        /* Zmëna jména pêi existenci souboru se stejným jménem. */
  236.        IF Exists(soubor) Then DO
  237.          Say ''
  238.          SAY ' Soubor s tímto názvem jiù existuje !'
  239.          SAY ' (Pokud chcete pûvodní soubor ztratit, stisknëte ENTER.)'
  240.          Options Prompt ' Zadejte nové jméno pro ª'nazevB'º: ' ; Parse PULL NazevB
  241.          IF NazevB='' Then Do; Say ' Jak chceî, soubor bude pêepsán.'; Call Delay 50 ; End
  242.                       Else DO ; Parse Var Nazev pred'.'. ; Nazev=pred'.rexx' ; END
  243.        END
  244.        
  245.        IF OKC=1 Then NOP     /* Pokud cestu zadával uùivatel, bude provedena kontrola, jinak bude následující çást pêeskoçena. */
  246.        Else DO
  247.          /* Kontrola vstupu - existence adresáêe , název souboru */
  248.          IF POS(':',soubor)=0 Then DO
  249.            Say ' Takový nesmysl neberu, cesta musí zaçínat názvem zaêízení !'
  250.            Spravne=0 ; Iterate P
  251.          END  
  252.          IF Pos('.',nazevB) > 0 Then Do
  253.            Parse var nazevB pred'.' . ; Nazev=pred'.rexx'
  254.          End
  255.          Else cesta=soubor
  256.          IF ~Exists(cesta) Then DO
  257.            say ' Adresáê ª'cesta'º neexistuje !'
  258.            /* Pokud vlastníte programový balík, na jehoù vývoji pracuji, mûùe být adresáê vytvoêen. */
  259.            NC_exists =  ShowList('A','NC') ; vsuvka=' '
  260.            IF NC_exists=1 Then DO
  261.               Options Prompt ' Chcete jej vytvoêit (Ano/Ne): ' ; Pull OK
  262.               IF Odpoved(OK)=1 Then DO;Call 'nc:Arexx_scripty/MakeDir.rexx' cesta; IF result>0 Then NC_exists=0; End
  263.                                Else DO;NC_exists=0;vsuvka=' tedy ';END
  264.            END
  265.            IF NC_exists=0 Then DO
  266.              Options prompt ' Chcete se'vsuvka'opravit? (Ano/Ne): ' ; Pull OK
  267.              IF Odpoved(OK)=1 Then Spravne=0
  268.                               Else Call END('Tak mi nezbývá nic jiného, neù se s vámi rozlouçit.')
  269.            END
  270.          END
  271.        END
  272.        K = Right(cesta,1) ; IF K=':' | K='/' Then vsuvka='' ; Else vsuvka='/' ; soubor = cesta||vsuvka||nazev
  273.      END
  274.      Say ''
  275.      Say ' Program se ukládá do souboru: 'soubor''
  276.    END 
  277.   parse source . . source . 
  278.   IF ~Open(OUT,soubor,W) Then DO; say ' Nelze otevêít soubor pro zápis!';Exit 10;End
  279.   Address COMMAND "COPY " source".info TO" soubor".info QUIET"
  280.   WriteLN(OUT,'/* Ukázkovvý program ª'nazev'º byl vycucnut dne' Date(E) 'v' TIME()'. */')
  281.   WriteLN(OUT,'')
  282. Return 0
  283.  
  284. Odpoved: /* Procedûra pro vyhodnocení odpovëdí ANO/NE */
  285.  Parse ARG OK
  286.  Znovu_A:
  287.   Select
  288.     When Left(OK,1)='A' Then OK=1
  289.     When Left(OK,1)='N' Then OK=0
  290.     WHen OK='' Then OK=0
  291.    Otherwise Do
  292.     Say '07'x      /*  Obrazovka blikne a zazní zvuk. */
  293.     Call Delay 20
  294.     Say ' Ptal jsem se jen  na Ano nebo Ne, ale staçilo by A nebo N.'
  295.     Options prompt ' Zopakujte proto svojí odpovëð! > ' ; Pull OK ; Call Znovu_A
  296.    End
  297.   End
  298. Return OK
  299.  
  300. END: /* Ukonçovací procedûra */
  301.  Parse Arg Text
  302.  IF Existuje=1 Then Exit 0
  303.  /* Zjiîtëní çasu a nastavení .... */
  304.  m = Time(M)
  305.  Select
  306.    When m>1320 Then r='zbytek dne'
  307.    When m>1200 Then r='veçer'
  308.    When m>1110 Then r='podveçeê'
  309.    When m>750  Then r='odpoledne'
  310.    When m>690  Then r='poledne'
  311.    When m>540  Then r='dopoledne'
  312.   Otherwise r='ráno'
  313.  End
  314.  If  m>1110 Then r='ý 'r
  315.  If  m<=1110 Then r='é 'r
  316.  
  317.  Say ' 'Text
  318.  Call Delay(Length(Text)*3)
  319.  IF Text='' Then WriteCH(STDOUT,' To je vîe. Jeîte vám chci popêát ')
  320.             ELSE DO; Say ' Tëîím se na naîí dalîí a lepîí spolupraci. ' ; Call Delay 70 ;WriteCH(STDOUT,' Takùe, nashledanou a pêeji vám ') ; END
  321.  Say 'pêíjemn'r'.'
  322.  Call Konec() 
  323. Exit 0
  324.  
  325. DEMO:   /* Informuje uùivatele o úçelu tohoto programu a nabídne mu jeho pouùití */
  326.   SIGNAL ON BREAK_F
  327.   /* Kontrola textu posledního êádku - pokud tam je napsáno ªDEMOº nebude následující text vypsán. */
  328.   Text=Upper(SourceLine(SourceLine()))
  329.   /* Nevím proç, ale pokud je pêístupova cesta k programu pêíliî dlouhá, funkce SourceLine() nefunguje. */
  330.   IF Text=0 Then DO
  331.     Say ''
  332.     Say ' Pêesuñte adresáê ªARexxManuálº do vyîîího adresáêe.'
  333.     Say ' Pêístupová cesta je dlouhá a nefunguje Sourceline().'
  334.     Say '' ; cesta=Pragma(D)'/Programy.rexx'
  335.     Say ' Aktuální cesta:' cesta 
  336.     Say '    Délka cesty:' Length(cesta) 'znakû  (musí být mënîí neù 53)'
  337.     Call konec()
  338.     Exit 0
  339.   END
  340.  
  341.   IF Text='DEMO' Then Demo=0 ; Else Demo=1
  342.  
  343.   /* Následující çást zabrání výpisu pêedeîlého textu .*/
  344.   IF demo=1 Then ADDRESS COMMAND 'ECHO >>Programy.rexx "DEMO"'
  345.  
  346.   IF Demo=1 Then DO
  347.     /* Procedûra Tiskni je souçástí ukázkového programu manipulace.rexx */
  348.     poczn=Tiskni('                   Byl spuîtën pomocný program',4,20)-18 ; CALL DELETE(poczn,,2,25)
  349.     Tiskni('*1;2m     Programy.rexx¶¶*0m',1,25)
  350.     poczn=Tiskni('*1m Autor: *2mTomáî Procházka*0m',3,40)-1 ; Call Delete(poczn,,1,20)
  351.     poczn=Tiskni('*1m Datum: *2m'datum'*0m (Verze: 'verze')',3,40)-1 ; Call Delete(poczn,,1,20)
  352.     Tiskni('*1m Význam programu:*0m¶',6,20)
  353.     Tiskni(' Tento program slouùí pêedevîím k interaktivnímu spouîtëní¶ ukázkových programû pêímo z Arexx manuálu.¶',3,50)
  354.     Tiskni('¶ Jeho  moùnosti  jsou vîak dalekosáhlejîí. Umí totiù tyto¶ programy  také  uloùit  do  souboru  k  vaîemu  bliùîímu¶ prozkoumaní nebo experimentování.¶',3,50)
  355.     Tiskni('¶ Plnë  lze  tento program  vyuùít  pêímo  z manuálu.',3,15) 
  356.     IF Existuje=0 Then DO ; Tiskni(', ale ¶ kdyù si poêídíte knihovnu ªRexxReqTools.libraryº umoùním¶ vám to, co vám nyní umoùnit nemohu.',4,40) ; Exit 0 ; END
  357.     Tiskni(', ale ¶ vzhledem  k tomu, ùe  jste îtastným  majitelem  knihovny¶ ª*2mRexxReqTools.library*0mº, umoùním vám nëco jiù nyní...',4,40) 
  358.     Tiskni('¶¶ *1mTato správa jiù nebude nikdy vypsána. !!!¶',,50)
  359.   END
  360.   Call RezimVyb()
  361. Exit 0
  362.  
  363. RezimVyb: ; BREAK_F:
  364.   NL = 'A'x ; OK=1
  365.   Call Close(STDOUT) ; Call Close(STDIN)
  366.   IF Show('L','rexxreqtools.library') Then  OK = rtezrequest('Výbërový reùim pomocného programu'NL||NL'Vyberte si co chcete spustit:','_Popis Arexxu|Nëjaký _program| _Zruîit ','Výbër (Tomáî Procházka ©1998-2000)','rtgs_flags=gsreqf_centertext')
  367.   IF OK>0 THEN Address COMMAND "run >nil: Multiview ArexxManuál.guide"
  368.   IF OK=2 THEN DO
  369.       Porty_A = SHOW(P,,'*')
  370.       DO Until Pozice>0
  371.         Call Delay 25
  372.         Porty_B = SHOW(P,,'*')
  373.         Pozice=COMPARE(Porty_B,Porty_A)
  374.       END
  375.       Parse var Porty_B . =pozice nazev'*'
  376.       Address VALUE nazev
  377.       Call Delay 10
  378.       'Previous' ; 'Next'
  379.   END
  380. Exit 0
  381.  
  382. Delete: /* Procedûra simulující Delete */
  383.  ARG vlevo,pocetMZ,prodleva,pockat
  384.   IF prodleva='' Then Prodleva=1 ; IF pocetMZ='' Then pocetMZ=vlevo
  385.   Writech(STDOUT,''vlevo'D')
  386.   DO FOR pocetMZ
  387.     Call Delay(prodleva)
  388.     Writech(STDOUT,'P')
  389.   END
  390.   IF pockat='' Then Pockat=0
  391.   Delay pockat
  392. Return 0
  393.  
  394. Konec: 
  395.   SAY ''
  396.   Say ' Pokud chcete okno zavêít, stlaçte ENTER...' 
  397.   ReadLn(STDIN)
  398. Exit 0
  399.  
  400. Break_C:
  401.  Say '' 
  402.  Say '07'x      /*  Obrazovka blikne a zazní zvuk. */ ; Call Delay 10
  403.  Say ' Proç? Tohle se nedëlááá...' ; Call Delay 50
  404.  Say ' Takhle më odtrhnout od rozdëlané práce. Fuj...' ; Call Delay 100
  405. Exit 0
  406.  
  407. SYNTAX: /* Návëstí Interuptu SYNTAX - oîetêení syntaxní chyby */
  408.     moje = pocatekP > sigl
  409.   Say ''
  410.   IF moje=0 Then Say ' Doîlo k chybë zpûsobené ukázkovým programem'
  411.             Else Say ' Doîlo k chybë zpûsobené chybou tohoto programu'
  412.   Say '  Chybný êádek' sigl':' Strip(SourceLine(Sigl),B)
  413.   Say '  Popis chyby: Chyba çíslo' RC '->' ErrorText(RC)
  414.   SAy ''
  415.   IF moje=0 Then DO
  416.     Say ' Chyba byla pravdëpodobnë  zpûsobena nevhodným pouùítím'
  417.     Say ' ukázkového programu. Ukázkové programy jsou natolik jedno-'
  418.     Say ' ché, ùe si nedokáùí poradit z neoçekávanou situácí...'
  419.     Say ' Dávejte si pêi programování vlastních programû dobrý pozor'
  420.     Say ' na to, aby k podobné  chybë dojít nemohlo. Pêi psaní nikdy'
  421.     Say ' nevíte v jaké  situaci se váî program ocitne. Nejlepîí je,'
  422.     Say ' kdyù  je pêipraven  úplnë na  vîechno.  Pûvodnë jednoduchý'
  423.     Say ' program  se pak stane  náramnë  sloùitým a stejnë se nako-'
  424.     Say ' nec stane, ùe  po úmorné práci  program  nëkomu  dáte a on'
  425.     Say ' se zaçne chovat tak, ùe vám dokonale  zkazí povëst. Napsat'
  426.     Say ' program, který  vás nezradí  vyùaduje  velkou  zkuîenost a'
  427.     Say ' pêedvídavost pêi odlaðování programu.'
  428.     Say ' Ùe je to pravda, vím bohuùel z vlastní zkuîenosti.'
  429.   End
  430.   Else Do
  431.     SAY ' Kontaktujte prosím autora a informujte ho o pêíçinë vzniku'
  432.     SAY ' této chyby. Chybový protokol je v ªram:AM_ChybProtokolº.'
  433.     CAll Open('ER','ram:AM_ChybProtokol',W)
  434.     Writeln(ER,'Chybový protokol ArexxManuálu ('Time()',' Date())
  435.     Writeln(ER,'Verze programu:' verze '('datum')')
  436.     Writeln(ER,'Chyba ç.' RC ' na êádku' sigl )
  437.     Writeln(ER,'Stav nëkterých promënných:')
  438.     Writeln(ER,'existuje =' existuje)
  439.     Writeln(ER,'P_ZUP =' P_ZUP)
  440.     Writeln(ER,'P_DUP =' P_DUP)
  441.     Writeln(ER,'Nepouzivat ='Nepouzivat)
  442.     Writeln(ER,'Path = 'Path)
  443.     Writeln(ER,'Z_STDOUT ='Z_STDOUT)
  444.     Writeln(ER,'Pêedané parametry:' Program "'"Parametry"'" ostatni)
  445.     Writeln(ER,'')
  446.     Writeln(ER,'Konec Protokolu') ; Call Close(ER)
  447.   End
  448.   Say ' '
  449.   Call Konec()
  450. Exit 10
  451.  
  452. POZICE:; ARG P; IF P='' Then Call POZICE(1); Return SIGL+1 /* Zjiîtëní çísla êádku */
  453. /* -------------------- Ukázkové Programy --------------------- */
  454. P1: /* Amiga */
  455.    /*Jednoduchý program*/
  456.    SAY 'AMiGA ,  multimediální poçítaç nejvyîîí kvality.'
  457. Return N
  458. /* ------------------------------------------------------------ */
  459.  
  460. P2: /* Stáêí */
  461.    /*Spoçítat stáêí ve dnech*/
  462.    SAY 'Prosím, prosím, moc prosím, zadejte Váî vëk:'
  463.    PULL stari
  464.    SAY 'Vy jste asi ' stari*365 'dnû starý.'
  465.    
  466. Return N
  467. /* ------------------------------------------------------------ */
  468.  
  469. P3: /* Calc */
  470.    /*Výpoçet druhých a têetích mocnin.*/
  471.    DO i = 1 TO 10       /*Zaçátek smyçky - 10 cyklû*/
  472.       SAY i i**2 i**3       /*Výpoçet a výstup*/
  473.    END               /*Konec smyçky*/
  474.    SAY 'Hotovo.'
  475. Return N
  476. /* ------------------------------------------------------------ */
  477.  
  478. P4: /* Sudé */
  479.    /*Sudé nebo liché*/
  480.    DO i = 1 to 10                 /*Poçátek smyçky - 10 cyklû*/
  481.       IF i // 2 = 0 THEN typ = 'sudé'
  482.          ELSE typ = 'liché'
  483.       SAY i 'je' typ
  484.    END                      /* Konec smyçky */ 
  485. Return N
  486. /* ------------------------------------------------------------ */
  487.  
  488. P5: /* Mocnina */
  489.    /*Definice a volání funkce*/
  490.    DO i = 1 to 5
  491.       SAY i Mocnina(i)          /*Volání funkce mocnina*/
  492.    END
  493.    Return E                         /*Ukonçení programu*/
  494.    
  495.    Mocnina:               /*Jméno funkce*/
  496.       ARG x               /*Vyvolat argument*/
  497.    RETURN x**2          /*Umocnit a vrátit zpët*/
  498. /* ------------------------------------------------------------ */
  499.  
  500. P6: /* Výsledek */
  501.    /*Pêedstavení monitorace výsledkû (sledování êádku po êádku)*/
  502.    TRACE results
  503.    sum = 0 ; sumq = 0 ;
  504.    DO i = 1 to 5
  505.       sum = sum + 1
  506.       sumq = sumq + i**2
  507.    END
  508.    
  509.    SAY 'sum=' sum 'sumq=' sumq
  510. Return N
  511. /* ------------------------------------------------------------ */
  512.  
  513. P7: /* Známka */
  514.    /*Program na výpoçet známky*/
  515.    SAY "Nazdar, já ti moùná spoçítám známky (jen kdyù budeî moc hodnej)."  
  516.    response = 0
  517.    DO while response ~ = "q"
  518.       /*Smyçka, dokud odpovëð není q*/
  519.       SAY "Prosím zadejte vîechny známky" 
  520.       SAY "Písemka 1:"
  521.       PULL es1
  522.       SAY "Písemka 2:"
  523.       PULL es2
  524.       SAY "Písemka 3:"
  525.       PULL es3
  526.       SAY "Písemka 4:"
  527.       PULL es4
  528.       SAY "Zkouîení :"
  529.       PULL p
  530.       Znamka = (((es1 + es2)/2*.3) + ((es3 + es4)/2*.45) + (p*.25))
  531.       SAY "Koncová známka je " Znamka
  532.       SAY "Chcete pokraçovat ?  (Ukonçit = Q)."
  533.       PULL response
  534.    END
  535.    Return E
  536. /* ------------------------------------------------------------ */
  537.  
  538. P8: /* TelNr */
  539.    /*Telefonní adresáê k objasnëní sloùených promënných*/ 
  540.    IF ARG() ~ = 1 THEN DO
  541.       SAY "Pouùití - RX TelNr jméno"
  542.       Return E5
  543.    END
  544.    /*Pro zobrazení telefonních çísel/adres otevêít vlastní okno*/
  545.    CALL OPEN out, "con:0/0/640/60/ARexx telefonní seznam"
  546.    IF ~ result THEN DO
  547.       SAY "Otevêení okna se nepovedlo ... Sorry"
  548.       Return E10 
  549.       END
  550.    /*Definice çísel*/
  551.    nummer. = '(není nalezeno)'
  552.    nummer.wsh = '(555) 001-0001'
  553.    adr. = 'nenalezena'
  554.    nummer.CBM = '(555) 002-0002'
  555.    adr.CBM = '1200 Wilson Dr., West Chester, PA 19380'
  556.    
  557.    /*Vlastní práce uù je hotová*/
  558.    ARG name   /*Jméno*/
  559.    CALL WRITELN out,name || "Tel.ç. je " nummer.name
  560.    CALL WRITELN out,name || 'Adresa je ' adr.name
  561.    CALL WRITELN(out,"Stisknëte enter pro opuîtëní programu.")
  562.    Call ReadLn out
  563.    Return E  
  564. /* ------------------------------------------------------------ */
  565.  
  566. P9: /* InterakceED */
  567.    /* Vyhodí status EDu. ED musí bëùet pêed spuîtëním tohoto programu. Ed-ové 
  568.    porty se jmenují 'Ed', 'Ed_1', 'Ed_2' atd. */       
  569.    DEFAULT_ED = "Ed"      /* Rozliîování velkých písmen je zde relevantní*/
  570.    /* Procedura pro pêípad, ùe ED nebëùí */ 
  571.    DO WHILE ~ SHOW('p',DEFAULT_ED)                /* Hledání portu */
  572.       SAY "Nenalezen: Port se jménem" DEFAULT_ED
  573.       SAY "Pouùitelné porty:"
  574.       SAY SHOW('P',,',') 
  575.       SAY "Zadejte jiné jméno portu nebo QUIT k opuîtëní programu" 
  576.       /* Uùivatel má zvolit port, pokud jej program nenajde */
  577.       DEFAULT_ED = READLN(stdin)
  578.       IF STRIP(UPPER(DEFAULT_ED)) = 'QUIT' THEN RETURN 10
  579.       /* Tímhle mûùe uùivatel opustit program */
  580.    END
  581.    SAY "Pouùíván bude port" DEFAULT_ED
  582.    /* Kdyù uù je port koneçnë nalezen, mûùe ho ARexx adresovat */
  583.    ADDRESS VALUE DEFAULT_ED 
  584.    /* Pár potêebných kmenových promënných je zêízeno */ 
  585.    STEM.0 = 15                /* Poçet Ed-ARexxových promënných */
  586.    STEM.1 = 'LEFT'            /* Levý roh (SL)*/
  587.    STEM.2 = 'RIGHT'           /* Pravý roh (SR)*/
  588.    STEM.3 = 'TABSTOP'         /* Tabulátory (ST)*/
  589.    STEM.4 = 'LMAX'            /* Maximálnë zobrazitelné êádky */
  590.    STEM.5 = 'WIDTH'           /* ííêka displaye ve znacích */
  591.    STEM.6 = 'X'               /* Fyzická X-ová posice, od 1 */
  592.    STEM.7 = 'Y'               /* Fyzická Y-ová posice, od 1 */ 
  593.    STEM.8 = 'BASE'            /* Základna okna */
  594.      /* Základna je 0, pokud není zpráva pêesunuta doprava */
  595.    STEM.9 = 'EXTEND'          /* Rozîíêit hodnotu okraje (EX) */ 
  596.    STEM.10 = 'FORECASE'         /* Psaní velkých a malých písmen */
  597.    STEM.11 = 'LINE'           /* Aktuální poçet êádkû */ 
  598.    STEM.12 = 'FILENAME'         /* Soubor bude editován */
  599.    STEM.13 = 'CURRENT'          /* Text aktuální êádky */
  600.    STEM.14 = 'LASTCMD'         /* Poslední rozîíêené kommando */
  601.    STEM.15 = 'SEARCH'          /* Poslední hledaný êetëzec */
  602.    /* Ed má hodnoty vloùit do kmenové promënné 'STEM.' . */
  603.    'RV' '/STEM/'          /* RV je Ed-ové kommando k posílání informací*/
  604.    /* STEM.1 je LEFT, a STEM.LEFT má nyní hodnotu z ED-u. Tak mohou být tato 
  605.    data vypsána */ 
  606.  
  607.    DO i = 1 to STEM.0
  608.       ED_VAR = STEM.i
  609.       SAY STEM.i "=" STEM.ED_VAR    
  610.       /*Ed-ové promënné a hodnoty vypsat*/
  611.    END
  612. Return N
  613. /* ------------------------------------------------------------ */
  614.  
  615. P10: /* Transpose */
  616.    /* Zaçatek programu je doplñen o zpuîtëní EDu a vepsání çísel*/
  617.    SAY 'Poznámka: ED se zavírá z menu poloùkou ªQUITº a pak klávesou ªYº.' ; Call Delay(140)
  618.    Say 'Spouîtím ED...'
  619.    If ShowList('p','Ed')=0 Then Do;Address COMMAND 'Run >nil: Ed Pokus';End
  620.    Do Until ShowList('p','Ed') ; Call Delay 20 ; End
  621.    Address 'Ed'
  622.    'i /123/'
  623.    Do A=1 To 3 ; 'cr' ; End
  624.    Call Delay 100
  625.  
  626.    /* Daný êetëzec '123', kdyù je kursor na 3, makro pêemëní na '132' */
  627.    HOST = ADDRESS()           /* Z kterého Ed-u pêiîlo volání ? */
  628.    ADDRESS VALUE HOST         /*. . . s editorem komunikovat*/
  629.    'RV' '/CURR/'             /*Ed má informaci vloùit do kmene CURR*/
  630.  
  631.    /*Potêebujeme dva údaje:*/
  632.    currpos = CURR.X           /* Kursorová pozice */
  633.    currlin = CURR.CURRENT
  634.    /* Obsah aktuální êádky */
  635.  
  636.    IF (currpos > 2)          /* Minimálnë 3. místa */
  637.        THEN currpos = currpos - 1
  638.        ELSE DO               /* Ohlásit chybu a vypadnout z programu */
  639.        Say 'Cursor musí stát minimálnë na têetí pozici!'
  640.        Return E10
  641.    END
  642.  
  643.    /* Znaky CURRPOS a CURRPOS-1 zamënit a aktuální êádek nahradit novým */ 
  644.    DROP CURR.  /*SYSTEM-ová promënná CURR není jiù potêeba; îetêíme pamëtí. */
  645.  
  646.    'd'                      /* Ed má smazat aktuální êádek */ 
  647.    currlin = swapch(currpos,currlin)      /* Dva znaky vymënit */
  648.    'i /'||currlin||'/'             /* Zmënëný êádek pêipojit */
  649.    DO i = 1 to currpos             /* Kursor zpët na staré místo */
  650.       'cr'                    /* Ed-ový pêíkaz - kursor doprava*/
  651.    End
  652.  
  653.    Say 'Zmëna çísla ª123º na ª132º probëhla.'
  654.    Return E                      /* Vîe hotovo */
  655.  
  656.    /* Funkce na výmënu dvou znakû */
  657.    swapch: procedure 
  658.    PARSE ARG cpos,clin
  659.        cl = substr(clin, cpos, 1)       /* naçíst znaky */ 
  660.        clin = delstr(clin, cpos, 1)      /* vymazat ze êetëzce */
  661.        clin = insert(cl,clin,cpos-2,1)      /* Pêidat, aby transpozice byla
  662.                                               kompletní */
  663.    RETURN clin                 /* Zmënëný êetëzec vrátit */
  664. /* ------------------------------------------------------------ */
  665.  
  666. P11: /* Shell */
  667.    /* Spustit nový Shell */
  668.  
  669.    conwindow = "CON:0/0/640/100/NovýShell/Close"
  670.    
  671.    /*Vytvoêit pêíkazový soubor*/
  672.    CALL OPEN('OUT',"ram:temp",'WRITE')
  673.    CALL WRITELN('OUT', 'echo "Toto je test"')
  674.    CALL CLOSE('OUT')
  675.    
  676.    /*Otevêít Newshellové okno*/
  677.    ADDRESS command 'newshell' conwindow 'ram:temp'
  678.    Return E
  679. /* ------------------------------------------------------------ */
  680.  
  681. P12: /* Iterace */
  682.    /*Pêíklady pro DO*/
  683.    LIMIT = 20; nummer = 1
  684.    DO i = 1 to LIMIT for 10 WHILE nummer < 20
  685.       nummer = i * nummer
  686.       SAY "Iterace" i "nummer=" nummer
  687.    END
  688.    nummer = nummer/3.345; i = 0
  689.    DO nummer for LIMIT/5
  690.       i = i +1
  691.       SAY "Iterace" i "nummer=" nummer
  692.    END
  693. Return N
  694. /* ------------------------------------------------------------ */
  695. P13: /* Changestrings */
  696.  
  697.   teststring1 = " every  good  boy  does  fine "
  698.   SAY " every  good  boy  does  fine "
  699.   SAY STRIP(" every  good  boy  does  fine ")"."
  700.   SAY STRIP(" every  good  boy  does  fine ",,"e")"."
  701.   SAY STRIP("every  good  boy  does  fine",,"e")"."
  702.   SAY STRIP("every  good  boy  does  fine",," e")"."
  703.   SAY STRIP(teststring1, T)"."
  704.   SAY STRIP(teststring1, T," e")"."
  705.   SAY COMPRESS(teststring1)
  706.  
  707.   CALL TIME('r')
  708.   SAY TIME('Civil')    /*ças HH:MM (AM | PM) */
  709.   SAY TIME('h')        /*Hodiny od pûlnoci*/
  710.   SAY TIME('m')        /*Minuty od pûlnoci*/
  711.   SAY TIME('s')        /*Sekundy od pûlnoci*/
  712.   SAY TIME('e')        /*Uplynulý ças od spuîtëní çasového registru*/
  713.  
  714.   SAY TRACE()
  715.   SAY TRACE(TRACE())   /*Ponechat nezmënëné */
  716.  
  717.   SAY TRANSLATE('aBCdef')
  718.   SAY TRANSLATE('abcdef','1234')
  719.   SAY TRANSLATE('654321','abcdef','123456')
  720.   SAY TRANSLATE('abcdef','123','abcdef','+')
  721.  
  722.   SAY TRIM('    abc  ')
  723.  
  724.   SAY TRUNC(123.456)
  725.   SAY TRUNC(134566.123,2) 'DM'
  726.  
  727.   SAY UPPER('AbBCDef12Éb24') 
  728.  
  729.   abc = 'Mé jméno'
  730.   SAY VALUE('abc')
  731.  
  732.   SAY VERIFY('123a45','0123456789')
  733.   SAY VERIFY('abc3de','012456789','M')
  734.  
  735.   SAY WORD('Nyní je ças',3)
  736.  
  737.   SAY WORDINDEX('Nyní je ças  ',3)
  738.  
  739.   SAY WORDLENGTH('Nyní je jiù ças',4)
  740.  
  741.   SAY WORDS('Nyní je jiù ças')
  742.  
  743.   IF OPEN('test','ram:test$$','W') THEN DO 
  744.     WRITECH('test','Hallo')   /*Zapsat êetëzec */
  745.     CALL CLOSE 'test'
  746.   END
  747.  
  748.  IF OPEN('test','ram:test$$','W') THEN DO
  749.    WRITELN('test','Hallo')   /*Zapsat êetëzec + znak pro posun êádkû*/
  750.    CALL CLOSE 'test'
  751.  END
  752.  
  753.  SAY X2C('616263')   /*Pêemëní na znaky(spakované)*/
  754.  SAY C2X(XRANGE('f0'x))
  755.  
  756.  SAY XRANGE('a','g')
  757.  
  758. Return 0
  759. /* ------------------------------------------------------------ */
  760. P14: /* OpenLibrary */
  761.    
  762.    /* Otevêít Rexxsupport.library, jestli se tak jiù nestalo */
  763.    IF ~ SHOW('L',"rexxsupport.library") THEN DO 
  764.    /* Je uù otevêená? Není-li, tedy se pokus ji otevêít */
  765.    IF ADDLIB('rexxsupport.library',0,-30,0)
  766.       THEN SAY "Rexxsupport.library otevêena."
  767.      ELSE DO SAY 'Rexxsupport.library není k dispozici, program je opuîtën'
  768.        RETURN E10  /* Pêi selhání ADDLIB je program opuîtën */
  769.        END 
  770.     END
  771. Return N
  772. /* -------------------Doplñëné programy------------------------ */
  773.  
  774. PD1: /* Násobilka */
  775.    DO Kolika=2 To 10 
  776.      Say '' ; Say 'Násobilka' kolika '' 
  777.      DO i = 1 to 10 
  778.         IF kolika*I > 100 THEN LEAVE Kolika
  779.         Say ' 'I '×' kolika '=' I*Kolika
  780.      END                     
  781.    END
  782. Return N
  783. /* ------------------------------------------------------------ */
  784.  
  785. PD2: /* Manipulace */
  786.    Call Tiskni('       *1;2mVítám vás v ukázkovém programu.*0m¶¶',4,20)
  787.    Call Tiskni(' Zkuste se mnou chvíli spolupracovat!  Ano?',2,50)
  788.    Call Tiskni('¶ Zadejte údaje ve formátu: *1m<Jméno> <Pêíjmení>,<datum narození>*0m',1,40)
  789.    /* Text bude smazán a znovu napsán jiný ... */
  790.    Call Tiskni('*16D|                ') ; Call Tiskni('*16D|*1m<den.mësíc.rok>*0m',2,30)
  791.    /* Poçítaç si vyùádá vîechny udáje */
  792.    Call Tiskni('¶ Zadejte své údaje: ') 
  793.    PARSE PULL J1' 'P1','datum1
  794.    Call Tiskni(' Zadejte údaje svého pêítele: ') 
  795.    PARSE PULL J2' 'P2','datum2
  796.    Call Tiskni(' Dëkuji, Zpacovávám údaje') ; Call Tiskni('.......¶',10)
  797.    Call Tiskni(' *2mNejpreve se podívám na vaîe datumy narození...*0m¶',2,10)
  798.  
  799.    /* Následující çást formatuje datumy na: ªRRRRMMDDº */
  800.      DO A=1 TO 2 
  801.      INTERPRET "PARSE VAR datum"A "den'.'mesic'.'rok" 
  802.      den   = Right(den,2,'0')
  803.      mesic = Right(mesic,2,'0')
  804.      IF LENGTH(rok)=2 THEN Rok='19'rok
  805.      INTERPRET "datum"A "= COMPRESS(rok||mesic||den)"
  806.      INTERPRET "IF LENGTH(datum"A")>8 Then DO;SAY 'Chybné zadání';Return E10;END"
  807.    END
  808.  
  809.    /* Následující çást ukazuje zpûsob pouùítí funkce DATE()*/
  810.    rozdil = DATE(INTERNAL,datum1,S) - DATE(INTERNAL,datum2,S)
  811.    IF rozdil>0 THEN Text='mladîí' /* rozhodnutí zda jsi mladîí nebo starîí */
  812.                ELSE Text='starîí'
  813.    rozdil=ABS(rozdil)            /* Odstranëní znaménka ª-º funkcí ABS()   */
  814.    IF rozdil=1 THEN k='en'       /* nastavení koncovky podle poçtu dnû     */
  815.                ELSE k='ny'
  816.    IF rozdil>4 Then k='nû'
  817.  
  818.    IF rozdil=0 THEN Call Tiskni('  To je ale náhoda, vy jste stejnë staêí. !?!?¶',1,50)
  819.                ELSE Call Tiskni('  Jsi o' Rozdil 'd'k Text' neù tvûj pêítel' J2 P2'.¶',1,40)
  820.  
  821.    /* Následující çást si pohraje se jmény. */
  822.    Call Tiskni('¶ Tak jak se vám líbil mûj výkon,',2,20)
  823.    Call Tiskni('.....,',10) ; Call Tiskni('jsem naprosto dokonalý.¶',,20)
  824.    Call Tiskni(' Takùe, Ahoj' J1 P2 'a pozdravuj' J2 P1'.¶',3,40)
  825.    Call Tiskni(' Zní mi to trochu divnë, ne ?',3,40) ; Call Tiskni('... ... NE! ¶¶',4,40)
  826.  
  827.    RETURN E0
  828.  
  829.    Tiskni: PROCEDURE 
  830.    /* Tato procedûra postupnë vypisuje text na obrazovku */
  831.     PARSE ARG Text,Prodleva,Pauza
  832.     IF Prodleva='' Then Prodleva=1
  833.     IF Pauza='' Then Pauza=0
  834.     pocet=0
  835.     DO cyklus=0  Until Length(Text)=0
  836.       PARSE VAR Text String +1 Text
  837.       Select
  838.         When String='¶' Then Say ''
  839.         When String='*' Then Do /* úprava êetëzce pro zmënu atributû */
  840.           PARSE VAR Text kontrola'*'.  /* Vysvëtlení */
  841.           Poz = POS('m',Kontrola) + POS('|',Kontrola) + 1
  842.           PARSE VAR Text atributy =Poz Text
  843.           Atributy=COMPRESS(Atributy,'|')
  844.           Call WriteCH(STDOUT,''atributy) /* Tohle je znak Esc: ªº */
  845.           ITERATE cyklus
  846.         End
  847.        Otherwise DO
  848.          Call WriteCH(STDOUT,String) ; Pocet=pocet+1
  849.          IF Strip(string)~='' Then Call Delay Prodleva
  850.        END
  851.       End 
  852.     END
  853.     Call Delay Pauza
  854.     RETURN Pocet
  855. /* ------------------------------------------------------------ */
  856.  
  857. PD3: /* Bit_manipulace */
  858.    /* Bitové operace, zmëna stavu bitu - TP */
  859.    Options Prompt 'Zadej çíselný êetëzec (Maska: êetëzec,çíselná soustava {B|X| }):'
  860.    Pull String','soustava ; Interpret "Stary='"String"'"soustava
  861.    IF soustava~='B' Then Say 'Vámi zadane çíslo vypadá v binární soustavë takto:' C2B(Stary)
  862.  
  863.    Do A=0 BY 1
  864.      /* Následující zpráva bude vypsána aù po druhém prûchodu smyçkou. */
  865.      IF A>0 Then Say 'Pokud zadáte cokoliv jiného neù çíslo, bude peogram ukonçen.'
  866.      Options Prompt 'Zadej pozici çísla jenù má být zmëneno (max.'Length(C2B(Stary)-1)'):'
  867.      Parse Pull Bit                         /* Uùivatel zadá hodnotu. */
  868.      /* Pokud bit není çíslo, následující êádek opuîtí program. */
  869.      IF Datatype(bit)='CHAR' Then Return 0
  870.      Novy = BITCHG(Stary,Bit)
  871.      /* Výpis zprávy, která podrobnë informuje o provedené zmënë. */
  872.      Say ''
  873.      Say '          Binární podoba   Decimální podoba   Znak tabulky ASCII'
  874.      Say 'Pûvodní:  'Center(C2B(Stary),14)'  'Center(C2D(Stary),16)'  'Center(Stary,18)''
  875.      Say 'Zmënëný:  'Center(C2B(Novy),14)'  'Center(C2D(Novy),16)'  'Center(Novy,18)''
  876.      Say ''
  877.    END
  878. Return N
  879. /* ------------------------------------------------------------ */
  880.  
  881. PD4: /* Adresy */
  882.    /* Adresy.rexx aneb Zjiîtëní pouùívaného Fontu - TP */
  883.  
  884.    gfxbase = showlist(l,'graphics.library',,a)
  885.    Call forbid()
  886.     FntAddr = NEXT(gfxbase,154)
  887.     DefFont = IMPORT(next(FntAddr, 10))
  888.     FSize = C2D(IMPORT(offset(FntAddr, 20),2))
  889.    Call permit ()
  890.    Say ' Vámi aktuálnë pouùívaný font je: ª'DefFont'º'
  891.    Say ' Jeho velikost je' Fsize'.'
  892. Return N
  893. /* ------------------------------------------------------------ */
  894.  
  895. PD5: /* Barvy */
  896.    /* Barevný pêechod s okny Shellu - TP */
  897.  
  898.    MaxCol= 32 /* poçet barev vaîí obrazovky */
  899.    cykly = 2  /* poçet cyklû */
  900.  
  901.    /* poslední dva parametry fungují jen 
  902.       pokud máte nainstalován KingCON    */
  903.    param = '/NOBORDER/NOSIZE/NOGADS/NOMENU'
  904.    Open(outA,'con: 10/25/150/100/A'param)
  905.    Open(outB,'con:160/25/150/100/B'param)
  906.    Open(outC,'con:310/25/150/100/C'param)
  907.    Open(outD,'con:460/25/150/100/D'param)
  908.    Open(outE,'con:610/25/150/100/E'param)
  909.  
  910.    MaxCol=(MaxCol-1)*cykly
  911.    Do bar=0 to MaxCol
  912.       Writech(outA,'>'bar'm')
  913.       Writech(outB,'>'bar+1'm')
  914.       Writech(outC,'>'bar+2'm')
  915.       Writech(outD,'>'bar+3'm')
  916.       Writech(outE,'>'bar+4'm')
  917.      Call delay(Trunc((MaxCol-bar)%4,0))
  918.    End
  919.  
  920.    Close(outE);Close(outD);Close(outC);Close(outB);Close(outA)
  921.  
  922. Return N
  923.  
  924. /* ---------------------------KONEC---------------------------- */
  925. /* Pokud se na dalîím êádku nachází ªDEMOº nebude pêi spuîtëní tohoto programu vypisován text. */
  926.